/**
 *
 * @author Kenneth
 * Servlet al cual redirecciona la pagina luego de hacer el submit en la consulta
 * de clientes
 */

package moduloautenticacion;

import sistemaamd.Usuario;
import sistemaamd.ServiceResult;
import proxy.ProxyAutenticacion;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class srvAutenticacionProcess extends HttpServlet {
    /** 
     * Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        try {
            //obtiene la variable de session
            HttpSession session = request.getSession(Boolean.TRUE);
            //crea una instancia del Proxy (o apuntador a capa 2)
            ProxyAutenticacion proxySistemaAmd = new ProxyAutenticacion();
            //variable de resultado
            ServiceResult resultado;

            String emailLogin=request.getParameter("email");
            String passmd5=request.getParameter("hash");

            //realiza la consulta de clientes en capa 2
            resultado = proxySistemaAmd.getServicios().autenticarUsuario(emailLogin, passmd5);
            //resultado = proxySistemaAmd.getServicios().validarUsuario(emailLogin, passmd5);

            //si hubo algun error
            if(resultado.getExisteError().booleanValue()) {
                //se establece en sesión la descripcion del error
                session.setAttribute("sessionError", resultado.getDescripcionError());
                //y se redirecciona a la pagina principal, con un parametro que indica que hay error
                response.sendRedirect("login.jsp?error=true");
            }
            else {
                //si no hubo errores, se obtiene la lista de Clientes
                ArrayList<Usuario> lista = resultado.getValorResultado();
                Usuario usuario =(Usuario)lista.get(0);
                //se establece en sesión la lista de clientes
                session.setAttribute("usuario", usuario);
                session.setAttribute("correo", emailLogin);
                session.setAttribute("logueado", true);
                //y se redirecciona a la pantalla que muestra la tabla de clientes
                response.sendRedirect(response.encodeRedirectURL("index.jsp") );
            }

        } catch(Exception ex) {
            out.println("<html>");
            out.println("<head><title>Error</title></head>");
            out.println("<body>");
            out.println("<h1>Error</h1>");
            out.println("Error: <strong>"+ex+request.getParameter("hash") + "</strong><br>");
            out.println("</body></html>");
        } finally {
            out.close();
        }
    } 

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /** 
     * Handles the HTTP <code>GET</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        processRequest(request, response);
    } 

    /** 
     * Handles the HTTP <code>POST</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        processRequest(request, response);
    }

    /** 
     * Returns a short description of the servlet.
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>

}
